package com.yh.web;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yh.pojo.Product;
import com.yh.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * @author by 张晨光
 * @date 2023/11/2 14:09
 */
@Controller
@RequestMapping("product")
public class ProductController {
    //调用业务层的对象;
    @Autowired
    ProductService productService;

    /**
     * 获取所有数据;从页面aside.html,单击产品管理，进到该方法;
     * @param page  :pageNum
     * @param size  :pageSize
     * @param model
     * @return
     */
    @GetMapping("findAll")
    public String getAll(@RequestParam(value = "page",defaultValue = "1") Integer page,
                         @RequestParam(value = "size",defaultValue = "5") Integer size, Model model){
        //1.设置PageHelper,一定要注意，设置页码，每页显示的条数，这行代码放在最前面.
        PageHelper.startPage(page,size);
        //3.使用dao/mapper去数据库查询数据;
        List<Product> productList = productService.findAll();
        //3.设置分页类,查询的数据集合，作为分页类的参数;
        PageInfo<Product>pageInfo=new PageInfo<>(productList);

//        System.out.println("当前页：" + pageInfo.getPageNum());
//        System.out.println("当前页显示的条数：" + pageInfo.getPageSize());
//        System.out.println("总页码：" + pageInfo.getPages());
//        System.out.println("分页相关的信息：" + pageInfo.getList());
//        System.out.println("分页总条数：" + pageInfo.getTotal());
            //添加数据
         model.addAttribute("pageInfo",pageInfo);
         //去view层;
        return "product-list";
    }
    @PostMapping("save")
    public String save(Product product){
        productService.save(product);
        //去哪里了？
        return "redirect:findAll";
    }

    /**
     * 根据id来查询商品的详细信息;
     * ModelAndView; addAttribute("product",product);
     *            .setViewName("product-show");
     *        return mv；对象;
     * @param id
     * @return
     */
    @GetMapping("findById")
    public String findProductById(@RequestParam("id") Integer id,Model model){
        Product product = productService.findById(id);
        //设置;将查询的产品对象，添加到model里面;
        model.addAttribute("product",product);
        return "product-show";
    }

    /**
     * 根据id，来查找产品数据;
     * @param id
     * @param model
     * @return
     */
    @GetMapping("editById")
    public String editById(@RequestParam("id") Integer id,Model model){
        Product product = productService.findById(id);
        //设置该对象，放到model里面;
        model.addAttribute("product",product);
        return "product-edit";      //这里和上面不一样;
    }

    /**
     * 这里出问题，没有走到这里.
     * bug:
     *      1.调试方法，猜测法：猜测参数出问题，去参数；可以进到controller;
     *      2.前端调试法；浏览器F12/右键 检查;
     * @param product
     * @return
     */
    @PostMapping("edit")
    public String edit(Product product){
        System.out.println("-----");
        productService.edit(product);
        //控制层 ->控制层;
        return "redirect:findAll";
    }

    /**
     * 由于Product表是一个主表，Orders表是一个从表，所以，需要考虑主从表的删除；
     *  主从表，不允许级联删除；
     *          先看从表的情况，再去删除主表的情况；
     *              将从表对应的productid,设置为null。
     *
     * @param id
     * @return
     */
    @GetMapping("deleteById")
    public String deleteById(@RequestParam("id") Integer id){
        productService.deleteById(id);
        return "redirect:findAll";
    }

    //批量删除;selectDelete
    @PostMapping("selectDelete")
    public String selectDelete(int[]ids){
        //如何做到批量删除呢？去调用业务层的删除每一个id的操作方法;
        for (int id : ids) {
            productService.deleteById(id);
        }
        return "redirect:findAll";
    }
}
